package com.javaclimb.filmbuy.service;

import cn.hutool.crypto.SecureUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.javaclimb.filmbuy.common.ResultCode;
import com.javaclimb.filmbuy.dao.AdminInfoDao;
import com.javaclimb.filmbuy.entity.AdminInfo;
import com.javaclimb.filmbuy.exception.CustomException;
import com.javaclimb.filmbuy.vo.AdminInfoVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/*
* 管理员信息service层
* */
@Service
public class AdminInfoService {

    @Resource
    private AdminInfoDao adminInfoDao;

    /*
    * 增加一个管理员
    * */
    public AdminInfo add(AdminInfo adminInfo){
        //设置默认密码是123456
        adminInfo.setPassword(SecureUtil.md5("123456"));
        adminInfoDao.insertSelective(adminInfo);
        return adminInfo;
    }

    /*
    * 根据主键id删除一个管理员
    * */
    public void delete(Long id){
        adminInfoDao.deleteByPrimaryKey(id);
    }

    /*
    * 更新一个管理员
    * */
    public void update(AdminInfo adminInfo){
        adminInfoDao.updateByPrimaryKeySelective(adminInfo);
    }

    /*
    * 根据主键id查询一个管理员
    * */
    public AdminInfo findById(Long id){
        return adminInfoDao.selectByPrimaryKey(id);
    }

    /*
     * 判断用户名和密码是否正确
     * */
    public AdminInfo login(String username, String password){
        AdminInfoVo adminInfoVo = adminInfoDao.findByUsername(username);
        // 没找到
        if(adminInfoVo == null){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        // 密码错误
        if(!SecureUtil.md5(password).equals(adminInfoVo.getPassword())){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        return adminInfoVo;
    }

    /**
     * 根据用户名模糊查询管理员对象列表，分页查询
     * @param name 用户名，不是必选项
     * @param pageNum 要查询第几页
     * @param pageSize 每页多少条数据
     * @return 管理员信息列表
     */
    public PageInfo<AdminInfoVo> findPage(String name, Integer pageNum, Integer pageSize){
        PageHelper.startPage(pageNum,pageSize);
        List<AdminInfoVo> byName = adminInfoDao.findByName(name);
        return PageInfo.of(byName);
    }
    //根据用户名查找一个管理员对象
    public AdminInfo findByUserName(String name){
        return adminInfoDao.findByUsername(name);
    }

    /**
     * 管理员总数
     */
    public Integer count(){
        return adminInfoDao.count();
    }
}












